<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>X-CUBE-AZRTOS-F4_ProjectsList</title>
  <style>
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../_htmresc/mini-st_2020.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->
</head>
<body>
<div class="row">
<div class="col-sm-12 col-lg-8">
<center>
<p>Copyright © 2020 STMicroelectronics<br />
</p>
<a href="https://www.st.com" class="logo"><img src="../_htmresc/st_logo_2020.png" alt="ST logo" /></a>
</center>
<h2 id="x-cube-azrtos-f4-azure-rtos-software-applications-list"><b>X-CUBE-AZRTOS-F4 Azure RTOS Software applications list</b></h2>
<p>The X-CUBE-AZRTOS-F4 Azure RTOS package comes with a rich set of applications running on STMicroelectronics boards,</p>
<p>organized by board and provided with preconfigured projects for the main supported toolchains</p>
<p>Projects are structured as follows:</p>
<center>
<img src="../_htmresc/AzureRTOS_Projects_Structure.png" width="60%" height="40%"/>
</center>
<h2 id="applications"><b>Applications</b></h2>
<table>
<colgroup>
<col style="width: 17%" />
<col style="width: 43%" />
<col style="width: 38%" />
</colgroup>
<thead>
<tr class="header">
<th>Middleware</th>
<th>Applications</th>
<th>Short Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>ThreadX</td>
<td>Tx_Thread_Creation</td>
<td>It demonstrates how to create and destroy multiple threads using Azure RTOS ThreadX APIs. In addition, it shows how to use preemption threshold between threads and change priorities on-fly. <a href="./STM32F429ZI-Nucleo/Applications/ThreadX/Tx_Thread_Creation/readme.html">more…</a></td>
</tr>
<tr class="even">
<td>ThreadX</td>
<td>Tx_Thread_Sync</td>
<td>It demonstrates how to synchronize between threads using binary semaphores or mutexes. <a href="./STM32469I-Discovery/Applications/ThreadX/Tx_Thread_Sync/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>ThreadX</td>
<td>Tx_Thread_MsgQueue</td>
<td>It demonstrates how to exchange message between threads using Message Queue API and how to handle message from different queues using event queue chaining feature. <a href="./STM32F429ZI-Nucleo/Applications/ThreadX/Tx_Thread_MsgQueue/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>ThreadX</td>
<td>Tx_FreeRTOS_Wrapper</td>
<td>It demonstrates how to create threads using the FreeRTOS wrapper APIs. <a href="./STM32F429ZI-Nucleo/Applications/ThreadX/Tx_FreeRTOS_Wrapper/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>ThreadX</td>
<td>Tx_CMSIS_Wrapper</td>
<td>It demonstrates how CMSIS RTOS adaptation layer for Azure RTOS ThreadX, it shows how to develop an application using the CMSIS RTOS 2 APIs. <a href="./STM32469I-Discovery/Applications/ThreadX/Tx_CMSIS_Wrapper/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>ThreadX</td>
<td>Tx_LowPower</td>
<td>It demonstrates how to configure the LowPower feature of Azure RTOS ThreadX stack. In addition, it shows how to use ThreadX MACRO related to the LowPower feature. <a href="./STM32F429ZI-Nucleo/Applications/ThreadX/Tx_LowPower/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>ThreadX</td>
<td>Tx_MPU</td>
<td>It demonstrates how to load, start and unload modules. In addition, it shows how ThreadX memory protection on modules using the Memory Protection Unit (MPU). <a href="./STM32F429ZI-Nucleo/Applications/ThreadX/Tx_MPU/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>USBX</td>
<td>Ux_Host_MSC</td>
<td>It demonstrates how to develop USB Host Mass Storage “MSC” able to enumerate and communicates with a removable usb flash disk. The application is designed to behave as an USB MSC Host able to operate with an USB flash disk using the Bulk Only Transfer (BOT) and Small Computer System Interface (SCSI) transparent commands combined with a file system AzureRTOS FileX. <a href="./STM32F429ZI-Nucleo/Applications/USBX/Ux_Host_MSC/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>USBX</td>
<td>Ux_Host_HID</td>
<td>It demonstrates how to develop USB Host Human Interface “HID” able to enumerate and communicates with a mouse or a keyboard. The application is designed to behave as an USB HID Host, the code provides required requests to properly enumerate HID devices , HID Class APIs to decode HID reports received from a mouse or a keyboard and display data on uart HyperTerminal. <a href="./STM32F429ZI-Nucleo/Applications/USBX/Ux_Host_HID/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>USBX</td>
<td>Ux_Host_CDC_ACM</td>
<td>It demonstrates how to develop USB Host CDC ACM device able to properly enumerate CDC devices then send and receive data that can be displayed on Hyperterminal or alike. <a href="./STM32F429ZI-Nucleo/Applications/USBX/Ux_Host_CDC_ACM/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>USBX</td>
<td>Ux_Device_MSC</td>
<td>It demonstrates how to develop USB Device mass storage class based application. The application is designed to emulate an USB MSC device, the code provides all required device descriptors framework and the associated Class descriptor report to build a compliant USB MSC device <a href="./STM32469I-Discovery/Applications/USBX/Ux_Device_MSC/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>USBX</td>
<td>Ux_Device_CDC_ACM</td>
<td>It demonstrates how to develop USB Device communication Class “CDC_ACM” based application. The application is designed to emulate an USB-to-UART bridge following the Virtual COM Port (VCP) implementation, the code provides all required device descriptors framework and associated Class descriptor report to build a compliant USB CDC_ACM device. <a href="./STM32469I-Discovery/Applications/USBX/Ux_Device_CDC_ACM/readme.html">more …</a>.</td>
</tr>
<tr class="odd">
<td>USBX</td>
<td>Ux_Device_HID</td>
<td>It demonstrates how to develop USB Device Human Interface “HID” mouse based application. The application is designed to emulate an USB HID mouse device, the code provides all required device descriptors framework and associated Class descriptor report to build a compliant USB HID mouse device. <a href="./STM32F429ZI-Nucleo/Applications/USBX/Ux_Device_HID/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>USBX</td>
<td>Ux_Device_CDC_ECM</td>
<td>It demonstrates how to develop USB Device CDC ECM communication. It shows how to run Web HTTP server based application stack over USB interface using USB CDC ECM protocol. <a href="./STM32469I-Discovery/Applications/USBX/Ux_Device_CDC_ECM/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>USBX</td>
<td>Ux_Host_DualClass</td>
<td>It demonstrates how to develop USB Host supporting two device classes: USB_HID (mouse or keyboard) and USB_MSC (removable flash disk). <a href="./STM32469I-Discovery/Applications/USBX/Ux_Host_DualClass/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>USBX</td>
<td>Ux_Host_HID_CDC_ACM</td>
<td>It demonstrates how to develop a composite "USB HID CDC_ACM Host" that is able to enumerate and communicate with composite USB HID CDC_ACM and simple HID/CDC_ACM devices. <a href="./STM32469I-Discovery/Applications/USBX/Ux_Host_HID_CDC_ACM/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>USBX</td>
<td>Ux_Device_HID_CDC_ACM</td>
<td>It demonstrates how to develop a composite USB Device application. The application is designed to emulate a USB HID mouse combined with an USB-to-UART bridge following the Virtual COM Port (VCP) implementation, the code provides all required device descriptors framework and associated Class descriptor report to build a compliant composite USB HID and CDC_ACM device. <a href="./STM32469I-Discovery/Applications/USBX/Ux_Device_HID_CDC_ACM/readme.html">more …</a>.</td>
</tr>
<tr class="even">
<td>USBX</td>
<td>Ux_Device_DFU</td>
<td>It demonstrates how to develop USB Device Firmware Upgrade "DFU" based application.The application is designed to emulate an USB DFU device, the code provides all required device descriptors framework and associated Class descriptor report to build a compliant USB DFU device. <a href="./STM32F429ZI-Nucleo/Applications/USBX/Ux_Device_DFU/readme.html">more …</a>.</td>
</tr>
<tr class="odd">
<td>FileX</td>
<td>Fx_uSD_File_Edit</td>
<td>It demonstrates how to develop a basic SD card file operations application. The application is designed to handle SD card insertion/removal events, and depending on that state, it starts and stops file operations from and into the SD card. <a href="./STM32469I-Discovery/Applications/FileX/Fx_uSD_File_Edit/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>FileX</td>
<td>Fx_MultiAccess</td>
<td>It demonstrates the FileX’s concurrent file access capabilities. The application is designed to execute file operations on the SD card device, the code provides all required software code for handling SD card I/O operations. <a href="./STM32469I-Discovery/Applications/FileX/Fx_MultiAccess/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>FileX</td>
<td>Fx_NoR_Write_Read_File</td>
<td>It demonstrates how to create a Fat File system on the NOR flash using FileX alongside LevelX. The application is designed to execute file operations on the MX25LM51245G NOR flash device, the code provides all required software code for properly managing it. <a href="./STM32469I-Discovery/Applications/FileX/Fx_NoR_Write_Read_File/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>FileX</td>
<td>Fx_DualInstance</td>
<td>It demonstrates the coexistence capability of two FileX/Levelx stacks running independently on each core. <a href="./STM32469I-Discovery/Applications/FileX/Fx_Dual_Instance/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>FileX</td>
<td>Fx_IAP</td>
<td>It demonstrates how to implement an In-Application programming (IAP) using FileX’s SD file access capabilities. The application is designed to erase and write to on-chip flash memory, it provides all required software code for handling SD card and flash memory I/O operations. This is a typical application on how to use the SD card peripheral for firmware upgrade application or IAP, allowing user to erase and write to on-chip flash memory. <a href="./STM32469I-Discovery/Applications/FileX/FX_IAP/IAP_main/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>FileX</td>
<td>Fx_SRAM_File_Edit_Standalone</td>
<td>It demonstrates how to create a Fat File system on the internal SRAM memory using FileX running in standalone mode without ThreadX. <a href="./STM32F429ZI-Nucleo/Applications/FileX/Fx_SRAM_File_Edit_Standalone/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>NetXDuo</td>
<td>Nx_TCP_Echo_Server</td>
<td>It demonstrates how to develop a NetX TCP server to communicate with a remote client using the NetX TCP socket API. <a href="./STM32F429ZI-Nucleo/Applications/NetXDuo/Nx_TCP_Echo_Server/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>NetXDuo</td>
<td>Nx_TCP_Echo_Client</td>
<td>It demonstrates how to develop a NetX TCP client to communicate with a remote sever using the NetX TCP socket API. <a href="./STM32F429ZI-Nucleo/Applications/NetXDuo/Nx_TCP_Echo_Client/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>NetXDuo</td>
<td>Nx_UDP_Echo_Server</td>
<td>It demonstrates how to develop a NetX UDP server to communicate with a remote client using the NetX UDP socket API. <a href="./STM32F429ZI-Nucleo/Applications/NetXDuo/Nx_UDP_Echo_Server/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>NetXDuo</td>
<td>Nx_UDP_Echo_Client</td>
<td>It demonstrates how to develop a NetX UDP client to communicate with a remote sever using the NetX UDP socket API. <a href="./STM32F429ZI-Nucleo/Applications/NetXDuo/Nx_UDP_Echo_Client/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>NetXDuo</td>
<td>Nx_WebServer</td>
<td>It demonstrates how to develop Web HTTP server based application.It is designed to load files and static web pages stored in SD card using a Web HTTP server, the code provides all required features to build a compliant Web HTTP Server. <a href="./STM32F429ZI-Nucleo/Applications/NetXDuo/Nx_WebServer/readme.html">more …</a></td>
</tr>
<tr class="even">
<td>NetXDuo</td>
<td>Nx_MQTT_Client</td>
<td>It demonstrates how to exchange data between client and server using MQTT protocol in an encrypted mode supporting TLS v1.2. <a href="./STM32F429ZI-Nucleo/Applications/NetXDuo/Nx_MQTT_Client/readme.html">more …</a></td>
</tr>
<tr class="odd">
<td>NetXDuo</td>
<td>Nx_SNTP_Client</td>
<td>It demonstrates how to develop a NetX SNTP client and connect with an STNP server to get a time update. <a href="./STM32F429ZI-Nucleo/Applications/NetXDuo/Nx_SNTP_Client/readme.html">more …</a></td>
</tr>
</tbody>
</table>
<h4 id="threadx-usage-hints"><b>ThreadX usage hints</b></h4>
<ul>
<li>ThreadX uses the Systick as time base, thus it is mandatory that the HAL uses a separate time base through the TIM IPs.</li>
<li>ThreadX is configured with 100 ticks/sec by default, this should be taken into account when using delays or timeouts at application. It is always possible to reconfigure it in the “tx_user.h”, the “TX_TIMER_TICKS_PER_SECOND” define,but this should be reflected in “tx_initialize_low_level.s” file too.</li>
<li>ThreadX is disabling all interrupts during kernel start-up to avoid any unexpected behavior, therefore all system related calls (HAL, BSP) should be done either at the beginning of the application or inside the thread entry functions.</li>
<li>ThreadX offers the “tx_application_define()” function, that is automatically called by the tx_kernel_enter() API. It is highly recommended to use it to create all applications ThreadX related resources (threads, semaphores, memory pools…) but it should not in any way contain a system API call (HAL or BSP).</li>
<li>Using dynamic memory allocation requires to apply some changes to the linker file. ThreadX needs to pass a pointer to the first free memory location in RAM to the tx_application_define() function, using the “first_unused_memory” argument. This require changes in the linker files to expose this memory location.
<ul>
<li>For EWARM add the following section into the .icf file:</li>
</ul>
<pre><code>place in RAM_region    { last section FREE_MEM };</code></pre>
<ul>
<li>For MDK-ARM:</li>
</ul>
<pre><code>either define the RW_IRAM1 region in the &quot;.sct&quot; file
or modify the line below in &quot;tx_low_level_initilize.s to match the memory region being used
    LDR r1, =|Image$$RW_IRAM1$$ZI$$Limit|</code></pre>
<ul>
<li>For STM32CubeIDE add the following section into the .ld file:</li>
</ul>
<pre><code>._threadx_heap :
  {
     . = ALIGN(8);
     __RAM_segment_used_end__ = .;
     . = . + 64K;
     . = ALIGN(8);
   } &gt;RAM_D1 AT&gt; RAM_D1</code></pre>
<pre><code>The simplest way to provide memory for ThreadX is to define a new section, see ._threadx_heap above.
In the example above the ThreadX heap size is set to 64KBytes.
The ._threadx_heap must be located between the .bss and the ._user_heap_stack sections in the linker script.  
Caution: Make sure that ThreadX does not need more than the provided heap memory (64KBytes in this example).  
Read more in STM32CubeIDE User Guide, chapter: &quot;Linker script&quot;.</code></pre>
<ul>
<li>The “tx_initialize_low_level.s” should be also modified to enable the “USE_DYNAMIC_MEMORY_ALLOCATION” flag.</li>
</ul></li>
</ul>
<h4 id="filexlevelx-usage-hints"><b>FileX/LevelX usage hints</b></h4>
<ul>
<li>When calling the fx_media_format() API, it is highly recommended to understand all the parameters used by the API to correctly generate a valid filesystem.</li>
<li>FileX is using data buffers, passed as arguments to fx_media_open(), fx_media_read() and fx_media_write() API it is recommended that these buffers are multiple of sector size and “4 bytes” aligned to avoid unaligned access issues.</li>
</ul>
</div>
</div>
</body>
</html>
